package evaluation;

import java.util.ArrayList;
import java.util.HashMap;

import utils.Review;

public class Evaluateur {
	/**
	 * Compte le pourcentage d'étiquettes affectées à une bonne review
	 * 
	 * @param reviews
	 *            La liste des reviews correctement étiquetées
	 * @param decisions
	 *            Une hashmap contenant en clé l'identifiant de la review
	 *            évaluée, et en valeur true si la review est évaluée positive,
	 *            false si elle est évaluée négative
	 */
	public void evaluer(ArrayList<Review> reviews,
			HashMap<Integer, Boolean> decisions) {

		int nbYes = 0, nbNo = 0, nbDecisions = 0;

		// Pour toutes les reviews
		for (Review review : reviews) {
			// Si elle est dans les decisions
			if (decisions.containsKey(review.getId())) {
				++nbDecisions;
				// Si on a raison sur une positive
				if (review.isOpinionPositive()
						&& decisions.get(review.getId()) == true) {
					++nbYes;
				}
				// Si on a raison sur une negative
				else if (review.isOpinionNegative()
						&& decisions.get(review.getId()) == false) {
					++nbYes;
				}
				// Sinon, on s'est trompé
				else {
					++nbNo;
				}
			}
		}// toutes les reviews

		 System.out.println("Pour " + reviews.size() + " avis, " +
		 decisions.size() + " decisions ont été prises.");
		 System.out.println(nbYes + " étaient bonnes");
		 System.out.println(nbNo + " étaient mauvaises");
		 System.out.println("Pourcentage de réussite : " +
		 ((double)100*nbYes/nbDecisions) + " %");
//		System.out.print(((double) nbYes / nbDecisions + "\t"));
//		System.out.print(nbYes + "\t");
	}
	
	public void printResults(ArrayList<Review> reviews, HashMap<Integer, Boolean> results) {
		String op;
		for(Review review : reviews) {
			if(results.containsKey(review.getId())) {
				op = results.get(review.getId()) ? "positive" : "negative";
				System.out.println("<review id='" + review.getId() + "' class='" + op + "'>");
			}
		}
	}
}
